// 1. 定义所有登录策略（封装独立规则）
const loginStrategies = {
  // 策略1：账号密码登录
  account: (data) => {
    if (!data.username) return { valid: false, msg: '用户名不能为空' };
    if (data.password.length < 6) return { valid: false, msg: '密码长度需≥6位' };
    return { valid: true, msg: '账号密码验证通过' };
  },
  // 策略2：手机号验证码登录
  phone: (data) => {
    const phoneReg = /^1\d{10}$/;
    if (!phoneReg.test(data.phone)) return { valid: false, msg: '手机号格式错误' };
    if (!/^\d{6}$/.test(data.code)) return { valid: false, msg: '验证码需为6位数字' };
    return { valid: true, msg: '手机号验证码验证通过' };
  },
  // 策略3：第三方登录
  thirdParty: (data) => {
    if (!['wechat', 'github', 'google'].includes(data.platform)) return { valid: false, msg: '不支持的第三方平台' };
    if (!data.authCode) return { valid: false, msg: '授权码不能为空' };
    return { valid: true, msg: '第三方登录验证通过' };
  }
};

// 2. 登录验证分发器（使用策略）
function verifyLogin(type, data) {
  // 容错：若登录方式不存在，直接返回无效
  if (!loginStrategies[type]) return { valid: false, msg: '不支持的登录方式' };
  // 调用对应策略进行验证
  return loginStrategies[type](data);
}

// 3. 测试
console.log(verifyLogin('account', { username: 'zhangsan', password: '123456' })); 
// { valid: true, msg: '账号密码验证通过' }
console.log(verifyLogin('phone', { phone: '13800138000', code: '123456' })); 
// { valid: true, msg: '手机号验证码验证通过' }
// 新增“邮箱登录”策略（无需修改verifyLogin）
loginStrategies.email = (data) => {
  const emailReg = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]+$/;
  if (!emailReg.test(data.email)) return { valid: false, msg: '邮箱格式错误' };
  return { valid: true, msg: '邮箱登录验证通过' };
};
console.log(verifyLogin('email', { email: 'test@example.com' })); 
// { valid: true, msg: '邮箱登录验证通过' }